import os
import time
from longguo_ui.config.config import config
from longguo_ui.utils.logger import logger


def take_screenshot(driver, name=None):
    """
    截取当前浏览器页面并保存为PNG图片，支持自定义名称和自动时间戳命名
    截图将保存在配置文件指定的截图目录，若目录不存在则自动创建

    :param driver: 浏览器驱动实例（如ChromeDriver、FirefoxDriver等），用于执行截图操作
    :param name: 截图文件名称（不含扩展名），可选参数。若未提供，将自动生成包含时间戳的名称
    :return: 成功时返回截图文件的完整路径（字符串），失败时返回None
    """
    # 检查并创建截图目录（确保目录存在，避免保存失败）
    if not os.path.exists(config.SCREENSHOT_DIR):
        os.makedirs(config.SCREENSHOT_DIR)
        logger.debug(f"截图目录不存在，已自动创建: {config.SCREENSHOT_DIR}")

    # 生成截图文件名称：优先使用自定义名称，否则使用时间戳确保唯一性
    if not name:
        # 时间戳格式：年月日_时分秒（如20231001_153045），避免文件名重复
        timestamp = time.strftime("%Y%m%d_%H%M%S")
        name = f"screenshot_{timestamp}"
        logger.debug(f"未指定截图名称，自动生成: {name}")

    # 拼接完整的截图文件路径（目录+文件名+扩展名）
    screenshot_path = os.path.join(config.SCREENSHOT_DIR, f"{name}.png")
    logger.debug(f"截图将保存至: {screenshot_path}")

    try:
        # 调用浏览器驱动的截图方法，保存为PNG图片
        # save_screenshot()方法返回布尔值，表示截图是否成功
        success = driver.save_screenshot(screenshot_path)
        if success:
            logger.info(f"截图成功，文件路径: {screenshot_path}")
            return screenshot_path
        else:
            logger.error("截图失败，浏览器驱动未返回成功状态")
            return None
    except Exception as e:
        # 捕获可能的异常（如权限不足、驱动异常等）
        logger.error(f"截图过程发生错误: {str(e)}")
        return None